#内置函数
#list() 列表 ；tuple() 元组 ；set() 字典
#abs() 绝对值 ； sum()求和 ；min()最小值
#max()最大值 ；
#zip()拉链函数（打包压缩，以元组形式返回），每个变量元素个数不一致时，按最短的来打包。
a=[1,2,3]
b=['a','b','c','d']
c=(6,5,4,9,3,0)
for i in zip(a,b,c):
    print(i)
print('\n')

#map() 
#map(function,iterable) 映射函数
#作用：可对可迭代对象中的每一个元素进行映射，分别执行function

#例子：计算列表中每一个元素的平方，返回新列表
li = [1,2,3,4]
def funa(x):
    return x**2
mp=map(funa,li)
print(list(mp)) 
#匿名函数实现同样的功能,如下：
print(list(map(lambda x:x**2,li)))
print('\n')


#reduce()
#可迭代对象中通过计算使元素不断减少,最终得到一个计算值
#reduce(函数名,可迭代对象)
from functools import reduce #导入模块
def func(x,y):
    return x + y
res = reduce(func,[1,2,3,4])
print(res)  #10
l=reduce(lambda x,y:x+y,[1,2,3,4])
print(l)
print('\n')


#enumerate 枚举 用于将一个可遍历的数据对象组合为一个索引序列，同时列出数据和数据下标，一般用于for循环当中。
#enumerate(可迭代对象,[start=0])
li = ['a','b','c','d']
for i,j in enumerate(li):
    print(i,j)
print(list(enumerate(li)))
print('\n')


#拆包：对与函数中的多个返回数据，去掉元组、列表或者字典，直接获取里面数据的过程。
def test():
    a = 10
    b = 20
    c = 30
    return a,b,c #return返回多个值，以元组形式返回到函数的调用处。
print(test())
a1,b1,c1 = test()#以元组形式返回到函数的调用处
print(a1)
print(b1)
print(c1)
print('\n')


#元组拆包升级版
tu = (1,2,3,4)
a,*c,b = tu #拆包 a,*c,b = (1,2,3,4)多变量赋值
print(a,b,c)
print('\n')


#列表拆包
a,*b = 1,2,3
print(a)
print(b)
print('\n')


#字典拆包
dic = {'name':'Terry','age':18,'gender':'男'}
a,b,c = dic
print(a,b,c)  #name age gender
#注意：对字典拆包后获取的是字典的key，而不是value



